#include "mcc_generated_files/mcc.h"
#include "user_uart.h"
#include "user_timer.h"

//// uart protocol 115200,START(2)+ID(1)+SN(1)+LEN(1)+DATA(n)+SUM(1)
////START:SYS->MCU=0xEE55,MCU->SYS=0x55EE
////Function ID:
////Serial number:
////Length:data field
////Data:
////checksum:~(id+sn+len+data)
//
//UartFsmStateType UartFsm;
//
//void Uart_Init(void)
//{
//    UartFsm.StateStep=UartFsmStep_Start1;
//    UartFsm.Sn=0;
//    UartFsm.Id=0;
//    UartFsm.Len=0;
//    UartFsm.DataCnt=0;
//    UartFsm.Checksum=0;
//}
//void Uart_Cyc()
//{
//    unsigned char rxdata=0x00;
//    
//    //rx loop
//    if(SysTimerBuf[SysTimer_Uart].TimerOccur==true)
//    {
//        SysTimerBuf[SysTimer_Uart].TimerOccur=false;
//        if(UartFsm.StateStep!=UartFsmStep_Done)
//            UartFsm.StateStep=UartFsmStep_Start1;
//    }
//    if(EUSART1_is_rx_ready())
//    {
//        rxdata = EUSART1_Read();
//        SysTimer_Set(&SysTimerBuf[SysTimer_Uart],UART_STREAM_TIMEOUT);
//        SysTimer_Enable(&SysTimerBuf[SysTimer_Uart],true); 
////            if(EUSART1_is_tx_ready())
////            {
////                EUSART1_Write(rxData);
////            }
//    }
//    else
//    {
//        return;
//    }
//    
//    //FSM Deal
//    switch (UartFsm.StateStep)
//    {
//        case UartFsmStep_Start1:
//            if(rxdata==UART_START1)
//                UartFsm.StateStep=UartFsmStep_Start2;
//            break;
//        case UartFsmStep_Start2:
//             if(rxdata==UART_START2)
//                UartFsm.StateStep=UartFsmStep_Id;   
//             else
//                UartFsm.StateStep=UartFsmStep_Start1;
//            break;
//        case UartFsmStep_Id:
//            UartFsm.StateStep=UartFsmStep_Sn;  
//            UartFsm.Id=rxdata;
//            UartFsm.Checksum=rxdata;
//            break;
//        case UartFsmStep_Sn:
//            UartFsm.StateStep=UartFsmStep_Len;  
//            UartFsm.Sn=rxdata;    
//            UartFsm.Checksum+=rxdata;
//            break;
//        case UartFsmStep_Len:
//            if(rxdata>UART_DATA_LEN_MAX)
//            {
//                UartFsm.StateStep=UartFsmStep_Start1;
//                break;
//            }
//            UartFsm.StateStep=UartFsmStep_Data;
//            UartFsm.DataCnt=0;
//            UartFsm.Len=rxdata;    
//            UartFsm.Checksum+=rxdata; 
//            if(UartFsm.Len==0)
//                UartFsm.StateStep=UartFsmStep_Sum;
//            break;
//        case UartFsmStep_Data:
//            UartFsm.DataBuf[UartFsm.DataCnt]=rxdata;
//            UartFsm.DataCnt++;
//            if(UartFsm.DataCnt>=UartFsm.Len)
//            {
//                UartFsm.StateStep=UartFsmStep_Sum; 
//            }
//            UartFsm.Checksum+=rxdata;
//            break;
//        case UartFsmStep_Sum:
//            if(UartFsm.Checksum==rxdata)
//            {
//                UartFsm.StateStep=UartFsmStep_Done;
//                //receive a frame data
//                UartFsm.StateStep=UartFsmStep_Start1;
//                Uart1Print("rcv ok\r\n");
//            }
//            else
//            {
//                UartFsm.StateStep=UartFsmStep_Start1;
//            }
//            break;
//        case UartFsmStep_Done:
//            break;     
//        default:
//            UartFsm.StateStep=UartFsmStep_Start1;
//            break;
//    }
//}
void Uart1Print(unsigned char *str)
{
    unsigned int timeout=0;
    while(*str!=0)
	{
        timeout=0;
        while(EUSART1_is_tx_ready()==0&&timeout<1000)
            timeout++;
        if(EUSART1_is_tx_ready())
        {
            EUSART1_Write(*str);
        }
		str++;
	}
}